package com.chengfei.thread.sync;

/**
 * @author chengfei5
 * @date 2019/1/7
 */
public class Demo2 {
    private static volatile Demo2 demo2;

    private Demo2() {

    }

    /**
     * @return
     */
    public static Demo2 getInstance() {
        if (demo2 == null) {
            synchronized (Demo2.class) {
                //双重检查加锁制
                if (demo2 == null) {

                    //指令重排序 volatile 关键字就会避免虚拟机优化造成指令重排序问题
                    demo2 = new Demo2();
                    //申请一块内存 1
                    //在这块空间里实例化对象 2
                    //instance引用只想这块空间地址 3
                }
            }
        }
        return demo2;
    }
}
